﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestProject1.MainClasses;
namespace TestProject1
{
    [TestClass]
    public class TestCategory
    {
        private IList<Category> CategoryList = new List<Category>();
        [TestMethod]
        public void TestMethodCatInit()
        {   // Проверка инициализации категории

            Category  c = new Category ();
            Assert.AreEqual(0, c.GetID());
            Assert.AreEqual("", c.GetName());
        }
        [TestMethod]
        public void TestMethodCatAdd()
        {   // Проверка добавления одной категории в список
            Category c = new Category();
            CategoryList.Add(c.add(441,"category1"));
            Assert.IsNotNull(CategoryList.First().GetID());
            Assert.IsNotNull(CategoryList.First().GetName());
            Assert.IsNotNull(CategoryList.First());

        }
        [TestMethod]
        public void TestMethodCatEqualAdding()
        {   // Проверка правильного заполнения полей при добавлении категории
            Category c = new Category ();
            int i = 1111;
            string s1 = "cat100500";
            CategoryList.Add(c.add(1111, "cat2"));
            Assert.AreEqual(i, CategoryList.First().GetID());
            Assert.AreNotEqual(s1, CategoryList.First().GetName());
        }
        [TestMethod]
        public void TestMethodCatAddingToList()
        {   // Проверка добавления нескольких категорий в список     

            Category  c = new Category();
            CategoryList.Add(c.add(101, "cat1"));
            Assert.IsNotNull(CategoryList.First());
            Category c1 = new Category();
            CategoryList.Add(c1.add(111, "cat2"));
            Assert.IsNotNull(CategoryList.ElementAt(1));
            Category c2 = new Category();
            CategoryList.Add(c2.add(121, "cat3"));
            Assert.IsNotNull(CategoryList.ElementAt(2));
        }
        [TestMethod]
        public void TestMethodCatEdit()
        {
            Category  c = new Category ();
            CategoryList.Add(c.add(101, "cat11"));
            int i = 199;
            string s1 = "controller";
            CategoryList.First().edit(i, s1);
            Assert.AreEqual(i, CategoryList.First().GetID());
            Assert.AreEqual(s1, CategoryList.First().GetName());
        }
        [TestMethod]
        public void TestMethodRoleRemove()
        {   //Проверка удаления категории из списка
            
            Category c3 = new Category();
            CategoryList.Add(c3.add(103, "cat2"));
            Category c4 = new Category();
            CategoryList.Add(c4.add(104, "cat1"));
            Category c5 = new Category();
            CategoryList.Add(c5.add(105, "cat3"));
            Category c1 = new Category();
            CategoryList.Add(c1.add(101, "cat1"));
            Category c2 = new Category();
            CategoryList.Add(c2.add(102, "cat1"));
            int cnt = CategoryList.Count();

            for (int i = 0; i < CategoryList.Count(); i++)
            {
                if (CategoryList.ElementAt(i).GetName() == "cat1")
                {
                    Assert.IsNotNull(CategoryList.ElementAt(i + 1));
                    CategoryList.RemoveAt(i); cnt--;
                    
                }
                Assert.AreEqual(cnt, CategoryList.Count());
            }
        }

    }
}
